/**
 * Copyright (c) 2002-2011 旭鸣信息
 * All rights reserved. 
 * File：IGoodsDao.java
 * History:
 *       May 11, 2012: Initially created, liuzhi.
 */
package com.xteam.ecsystem.dao;

import java.util.List;
import java.util.Map;

import net.sf.json.JSONArray;

import com.xteam.ecsystem.base.SystemContent;
import com.xteam.ecsystem.entities.SysServerConfig;
import com.xteam.ecsystem.utils.GoodsQueryCenterStation;
import com.xteam.ecsystem.utils.PageCenterStation;

/**
 * 商品数据访问接口
 * 
 * @author liuzhi
 * 
 */
public interface IGoodsDao {

	/**
	 * 查找图片
	 * @author liuzhi 2013-12-24
	 * @param bgpId
	 * @return
	 */
	public String findPicture(String bgpId);

	/**
	 * 新增或者修改商品信息
	 * @author liuzhi 2013-12-24
	 * @param obj
	 * @param id
	 * @return
	 */
	public String saveOrUpdateObject(Object obj, String id);

	/**
	 * 条件查询和分页显示商品信息
	 * @author liuzhi
	 * @param index
	 * @param size
	 * @param goodsStation
	 * @return
	 */
	public String getGoodsList(int pageIndex, int pageSize,
			GoodsQueryCenterStation goodsStation);

	/**
	 * 根据商品编号获得对应的商品信息
	 * @author liuzhi
	 * @param id
	 * @return
	 */
	public String getGoodsInfoById(String id);

	/**
	 * 根据商品编号修改商品状态 0：无效 1：有效
	 * @author liuzhi
	 * @param id
	 */
	public void updateGoodsStateById(String id);

	/**
	 * 根据商品编号修改精品商品推荐状态 0：不推荐 1：推荐
	 * @author liuzhi
	 * @param id
	 */
	public void updateBgiBestById(String id);

	/**
	 * 根据商品编号修改新品商品推荐状态 0：不推荐 1：推荐
	 * @author liuzhi
	 * @param id
	 */
	public void updateBgiNewById(String id);

	/**
	 * 根据商品编号修改热销商品推荐状态 0：不推荐 1：推荐
	 * @author liuzhi
	 * @param id
	 */
	public void updateBgiHotById(String id);

	/**
	 * 根据商品编号修改团购商品推荐状态 0：不推荐 1：推荐
	 * @author liuzhi
	 * @param id
	 */
	public void updateBgiBuyById(String id);

	/**
	 * 根据传递条件（add/query），加载商品分类treeselect
	 * @author liuzhi
	 * @param type
	 * @return
	 */
	public String getBggTreeSelect(String type);

	/**
	 * 查询面板，加载商品品牌combobox
	 * @author liuzhi
	 * @return
	 */
	public String getBgbCombobox();

	/**
	 * 查询面板，加载供货商combobox
	 * @author liuzhi
	 * @return
	 */
	public String getBgsCombobox();

	/**
	 * 根据商品类型获得类型属性表所有数据
	 * @author liuzhi
	 * @param btaGtype
	 * @return
	 */
	public String getAllGoodsTypeAttr(String btaGtype);

	/**
	 * 保存（添加或编辑）商品属性信息
	 * @author liuzhi
	 * @param bgiId
	 * @param btaGtype
	 * @param dynamicArray
	 * @param staticArray
	 */
	public void saveGoodsAttr(String bgiId, String btaGtype,
			JSONArray dynamicArray, JSONArray staticArray);

	/**
	 * 根据商品编号获得对应的商品属性信息
	 * @author liuzhi
	 * @param id
	 * @return
	 */
	public String getGoodsAttrByBgiId(String id);
	
	/**
	 * 根据商品编号从商品属性表中获取商品类型，然后根据商品类型加载指定的类型属性列表，
	 * 以此来创建商品属性表格。
	 * @author liuzhi Jan 15, 2013
	 * @param bgaGoods
	 * @return
	 */
	public String getGoodsAttrTab(String bgaGoods);
	
	/**
	 * 根据商品分类获得对应的商品类型
	 * @author liuzhi Jan 15, 2013
	 * @param bgaGgroup
	 * @return
	 */
	public String getBgtByBggId(String bgaGgroup);

	/**
	 * 删除图片
	 * @author lxj
	 * @param id
	 */
	public void delPicture(String id);

	/**
	 * 保存图片
	 * @author liuzhi 2013-12-24
	 * @param obj
	 * @param id
	 * @param serverCfg
	 */
	public void saveOrUpdatePicture(Object obj, String id, SysServerConfig serverCfg);

	/**
	 * 分页查询商品图片
	 * @author lxj
	 * @param pageIndex
	 * @param pageSize
	 * @param id
	 * @return
	 */
	public String getGoodsPicture(int pageIndex, int pageSize, String id);

	/**
	 * 条件查询和分页显示商品回收信息
	 * @author liuzhi
	 * @param index
	 * @param size
	 * @param bgiKeyword
	 * @return
	 */
	public String getGoodsTrashList(int pageIndex, int pageSize,
			String bgiKeyword);

	/**
	 * 删除单条或多条商品信息
	 * @author liuzhi
	 * @param ids
	 */
	public void delGoods(String ids);

	/**
	 * 还原单条或多条商品信息
	 * @author liuzhi
	 * @param ids
	 */
	public void saveRevertGoods(String ids);

	/**
	 * 获取指定状态的系统内容。
	 * @author Chrise 2012-6-29
	 * @param state
	 * @param value
	 * @param text
	 * @param parent
	 * @return
	 */
	public List<Map<String, String>> getSystemContent(int state, String value,
			String text, String parent);

	/**
	 * 获取指定状态的系统内容（名称使用模糊查询）。
	 * @author Chrise 2012-6-29
	 * @param name
	 * @param state
	 * @param first
	 * @param max
	 * @return
	 */
	public PageCenterStation<SystemContent> getSystemContents(String name,
			int state, int first, int max);

	/**
	 * 保存商品配件
	 * @author liuzhi 2013-12-24
	 * @param ids
	 * @param bgiId
	 */
	public void saveAccessories(String ids, String bgiId);

	/**
	 * 读取商品配件列表
	 * @author liuzhi 2013-12-24
	 * @param pageIndex
	 * @param pageSize
	 * @param bgiId
	 * @return
	 */
	public String getAccessoriesList(int pageIndex, int pageSize, String bgiId);

	/**
	 * 关联商品时，区分单向关联和双向关联
	 * 1、单向关联（0）：商品A关联商品B，通过商品A可以直接查询到商品B。
	 * 2、双向关联（1）：商品A管联商品B，同时商品B又关联商品A。
	 * 因此在查询某商品的关联商品时，要站在主动关联和被动关联两个角度去写查询语句。即：
	 * 
	 * sql-1: select * from BaseRefGoods where brgMgoods='当前商品ID' and brgIsDouble='0'；
	 * sql-2: select * from BaseRefGoods where brgRgoods='当前商品ID' and brgIsDouble='1'；
	 * 
	 * @see com.xteam.ecsystem.dao.IGoodsDao#saveAssociation(java.lang.String, java.lang.String, java.lang.String)
	 */
	public void saveAssociation(String brgRgoods, String brgIsDoulbes, String bgiId);

	/**
	 * 商品关联商品列表
	 * @author liuzhi 2013-12-24
	 * @param pageIndex
	 * @param pageSize
	 * @param bgiId
	 * @return
	 */
	public String getAssociationList(int pageIndex, int pageSize, String bgiId);

	/**
	 * 保存商品所关联的文章
	 * @author liuzhi 2013-12-24
	 * @param baiIds
	 * @param bgiId
	 */
	public void saveGoodsAricles(String baiIds, String bgiId);

	/**
	 * 读取商品所关联的文章列表
	 * @author liuzhi 2013-12-24
	 * @param pageIndex
	 * @param pageSize
	 * @param bgiId
	 * @return
	 */
	public String getArticlesList(int pageIndex, int pageSize, String bgiId);

	/**
	 * 保存单张商品图片
	 * @author liuzhi 2013-12-24
	 * @param fileNames
	 * @param bgiId
	 * @param serverCfg
	 */
	public void uploadGoodsPic(String fileNames, String bgiId, SysServerConfig serverCfg);

	/**
	 * 保存商品图片集
	 * @author liuzhi 2013-12-24
	 * @param bgpId
	 * @param bgpDesc
	 * @param bgpState
	 * @param bgpOrder
	 * @param isDeleted
	 */
	public void updatePics(String[] bgpId, String[] bgpDesc, String[] bgpState,
			String[] bgpOrder, String[] isDeleted);

	/**
	 * 根据商品分类编号加载商品属性表格数据，进而绘制该表格
	 * @author liuzhi Oct 15, 2013
	 * @param bggId
	 * @return
	 */
	public String getBgaTabData(String bggId);

	/**
	 * 绘制指定商品的属性列表
	 * @author liuzhi Oct 16, 2013
	 * @param bgiId
	 * @param bgiGroup
	 * @return
	 */
	public String getBgaTabPrint(String bgiId, String bgiGroup);

	/**
	 * 保存商品关联
	 * @author liuzhi Oct 22, 2013
	 * @param brgRgoods
	 * @param brgIsDoulbes
	 * @param bgiId
	 */
	public void saveBrgInfo(String brgRgoods, String brgIsDoulbes, String bgiId);

}
